Existem muitas siglas que a gente se depara trabalhando com determinada tecnologia. Sendo assim as mais importantes serão explicadas e as menos significantes serão alvo de pesquisa posterior.
Muitas vezes usamos termos que estamos cansados de usar tão corriqueiramente que esquecemos que quem esta aprendendo pode nunca ter ouvido falar no termo. Portanto, a seguir temos as Siglas e Termos mais comuns para quem trabalha com desenvolvimento web.
Existe alguns termos em desenvolvimento web que as pessoas da área normalmente usam e que uma
pessoa leiga ou nova na área terá que fazer muita pesquisa para descobrir e nem sempre estará
na linguagem que ela consiga entender.
Contudo dependo do fabricante da linguagem ele poderá usar outro termo para designar os conceitos abaixo mas eles existem em todas as linguagens.
Você se lembra que toda página web é composta pelo menos por 2 agentes : um web-server que publicou a página e o browser do seu micro. É chamada também de 2 tiers ou arquitetura cliente-servidor. Contudo a grande maioria dos sites são 3 tiers porque tem um servidor de banco de dados que tem os dados a serem exibidos na página.
Em web, Client-Side significa que o item abordado funciona do lado do cliente, dentro do browser . Um dos termos mais comuns é 'o javascript' é a linguagem mais utilizada do lado do cliente pois permite a validação de informações ainda no cliente evitando de enviá-las ao servidor e descobrir que falta algo ou tem erro.
Server-Side significa que item abordado funciona do lado do servidor, dentro do web-server . O Caso mais comum é a linguagem ASP NET ou PHP que são linguagens de desenvolvimento de páginas dinâmicas que funcionam dentro do servidor web.
Se você faz um site para uma empresa tem pelo menos 3 envolvidos no projeto : 1-Você, o desenvolvedor,
2-O cliente ou empresa que contratou o desenvolvimento do site e 3-O cliente que vai comprar ou interagir
com o site.
Sendo assim chamamos de 'frontend' tudo que envolve o atendimento ao cliente.
Chamamos de 'backend' tudo que mantém a empresa funcionando. Controle de estoque, logística pós venda, etc.
Como regra, o frontend é mais bem feito que o backend por ter relação direta com o faturamento da empresa.
Quando desenvolvemos um programa ou página web desenvolvemos um 'código' para executar alguma tarefa e no
'código' dessa página determinamos o que deve ser exibido ou executado, posição, estilo, etc.
Importante frisar que não obrigatóriamente o código que desenvolvemos é enviado para o usuário (veja
Páginas Dinâmicas). Portanto é muito importante que você salve as versões antigas da sua página se quiser,
em caso de erro, retornar a anterior. Se o erro foi feito no visual studio você pode ir teclando <control>z
que o visual studio vai desfazendo uma por uma das modificações até chegar ao que era originalmente. Contudo
se você salvar e sair do Visual studio perderá o histórico de modificações.
Veja TFS e GIT e GITHUB para versionamento das páginas de código do seu projeto.
Se você conhece bem o Inglês sabe que tag significa berruga ( skin tags ) mas não é bem isso que significa em web.
TAG é um marcador feito com texto simples mas que indica que o elemento não é um texto, pode ser uma
imagem, um vídeo, um campo de entrada de texto, etc.
Tecnicamente tudo que não é puro texto que você vê dentro da página HTML está dentro de uma tag HTML.
No visual studio e na maioria das ferramentas do windows ao criar uma página
nova o conjuntode caracteres padrão será
Europeu Ocidental (Windows) - Página de Código 1252
.
Infelizmente o padrão da Internet é
Unicode (UTF-8) - Página de Código 65001
Por esse motivo muita acentuação é perdida quando usamos o padrão errado ou quando
tentamos exportar informações do windows para a web e vice-versa.
Citando um exemplo, ao pegar um nome de arquivo do sistema operacional(windows) e exibir
na web com UTF-8 toda a acentuação dos nomes dos arquivos será perdida. Para corrigir
este problema temos de usar um locale para pt-br (em php : utf8_encode('string')).
Dizemos que um elemento é container de outro quando o elemento corrente esta dentro
de um outro em nível hierarquico superior (vide DOM), é filho de um elemento pai
que abriga diversos um ou mais elementos filhos dentro dele.
Citando um exemplo, uma tag div com tags ul ou input dentro para alinhar e modelar sua
exibição. Todas as tags dentro da tag div seriam tags filhas e a tag div seria a pai
e container de todas as demais dentro dela.
Lembre-se que o container de todas as tags do documento é o elemento BODY.
São tags html que se destinam a armazenar as informações digitadas pelo usuário e que serão enviadas ao
servidor futuramente através do botão submit.
Na tag form temos a definição do destino onde os dados devem ser enviados.
Contudo é necessário ter uma 'tecnologia de servidor' no destino dos dados porque é no mecanismo do
servidor web que as informações podem ser trocadas. Se você enviar simplemente para uma página de destino
os dados serão perdidos.
As tags de formulário mais comuns são form, input type text (acho que todas as tags input), botão tipo submit. Contudo podemos enviar opções em checkboxes, option buttons e podemos enviar informações escondidas, que o usuário não precisa sequer saber que exite com uma tag input tipo hidden.
Podemos dividir a produção de programas em duas grandes áreas : O desenvolvimento de aplicações nativas para as plataformas ( a Microsoft chama de Windows Forms ) e as aplicações web ( a Microsoft chama de aplicações web ).
Há uns 20 anos atrás era só o que havia mas com o crescimento da Internet a demanda por aplicações web subiu muito e hoje a grande maioria é desenvolvimento web.
O grande mau das aplicações nativas é que muitas delas são casadas com a plataforma, ou seja, se você
quer desenvolver para a Microsoft tem que usar as ferramentas da Microsoft, se quiser desenvolver para
a Apple tem que conhecer e utilizar as ferramentas da Apple e o mesmo vale para a Google.
Isto criou um seccionamento que muitas vezes empresas tem que ter duas ou tres equipes para desenvoler
o mesmo software em plataformas diferentes.
Outra grande desvantagem é que as ferramentas web hoje estão muito mais flexíveis que as nativas porque receberam o foco das atenções por anos e foram feitos muitos melhoramentos na web e poucos nas nativas.
Todos desenvolvedores desenvolvem programas utilizando ferramentas que facilitam o desenvolvimento e aumentam a produtividade. Para isso são criados os ferramentas que atendam a necessidades desses desenvolvedores e, dependendo da sua necessidade, existirá um ferramenta que tem vantagem sobre outras ferramentas para execução das tarefas.
A principal função dessas 'ferramentas' é auxiliar o desenvolvedor a realizar a sua tarefa da melhor maneira possível.
Os editores de texto voltados para desenvolvimento possuem algumas facilidade fundamental que é
a aplicação de cores para diferenciar partes do programa. Por exemplo:
Os melhores exemplos de editores de texto são o Sublime Text, o ATOM, o Visual Studio Code e muitos
outros.
Eles costumam ser leves por serem simples e restritos.
A IDE é velha, vem do tempo do Turbo Pascal no DOS mas fez tanto sucesso que até hoje é utilizada.
Além de ser editor de textos permite ainda compilar e executar programas ( na plataforma nativa ),
publicar / instalar o programa numa máquina local ou remota na rede ou mesmo publicar diretamente num
site web.
Os melhores exemplos são o Eclipse, NetBeans, o Visual Studio Community Edition.
Costumam ser bem mais pesados que os editores de texto mas são muito mais completos como, por exemplo,
ao alterar o tipo da tag de abertura automaticamente a IDE altera o tipo da tag de fechamento ou mesmo
alertar para um erro de sintaxe no JavaScript, coisa que em outra plataforma de desenvolvimento
só seria notada no momento de execução no site.
Se você leu o que mencionei acima então sabe que o desenvolvedor desenvolve o programa numa linguagem de alto nível mais amigável que 'mascara' certo grau de complexidade na montagem da aplicação.
Todo programa hoje em dia pode ser separado em módulos sendo que cada um desses módulos faz uma
tarefa específica como validar um cpf, autenticar o usuário.
O módulo tem a incumbência de tornar uma aplicação complexa como um todo em módulos, pequenos,
simples e que executam cada um uma pequena parte dessa atividade e, todos reúnidos, realizam
a tarefa solicitada.
Abstração é o poder que a linguagem ou o ambiente dá ao programador de maneira simplificar o desenvolvimento da aplicação.
Quando você declara uma variável a inteira o programa aloca ( designa ) uma área de memória, em bytes, capaz de armazenar o valor do tipo da variável e dá a essa 'alocação de memória' o nome a. Assim quando você pede para executar a instrução a=0 o programa vai na região de memória onde a variável foi designada e zera seu valor. Parece uma coisa tola e boba mas é fundamental para facilitar a vida do programador.
Outra coisa que a abstração permite é a utilização de recursos sem a necessidade de compreendê-los em detalhes. Por exemplo, numa aplicação Android eu posso pedir a uma funcionalidade para bater uma foto sem me preocupar qual será a sua resolução ou como será feito em detalhes. O programa simplesmente retornará a foto esta na pasta x ou não foi tirada a foto.
Na grande maioria das linguagens Classes são como 'receitas de bolo', ou seja, explicam como fazer uma coisa mas a coisa em sí realmente ainda não existe, é só um método ou modelo de 'como fazer a coisa'. Portanto, classe seria a 'receita de bolo' que em momento nenhum é o bolo. O bolo seria a realização da receita ou, em nosso caso, da classe tornada real fisicamente.
Explicando um pouco melhor numa classe nós podemos dizer que existe uma variável a e ela é do tipo inteira só que numa classe existe a definição mas ainda não existe na memória do computador para que este possa fazer cálculos, por exemplo.
No instânciamento carregamos uma classe para a memória do computador. Aí dizemos que os elementos
da classe realmente existem mas técnicamente ainda não foram inicializados, ou seja, como no exemplo
mencionado acima a variavel inteira a foi criada na memória mas qual é o seu valor ? Se o sistema
ao carregar a variável não colocou um valor default esta variável terá o valor que estava na memória
no momento que foi reservado o espaço da memória para aquela variável, portanto ela terá um valor
qualquer.
Uma das palavras chaves para instanciar uma classe é a palavra new.
Como disse acima na definição da classe temos a 'receita do bolo' o que nada mais é que uma maneira
de se criar o bolo mas NÃO É O BOLO EM Sí.
Exemplo : Classe 'meuBoloPredileto'
Contudo no instanciamento trazemos a classe e seus elementos para a memória e com isto o 'bolo' que antes era uma simples receita passa a ser um 'bolo' real, ou seja, o que antes era uma mera descrição falando que existia uma variável a inteira agora é uma área de memória que se atribuiu a variável a e com isto podemos fazer operações e cálculos com ela.
O Construtor normalmente é um método que é chamado assim que a classe é carregada para a memória para
inicializar seus elemento. Portanto se quero definir que o string nome tem o valor 'Carlos' logo
após a carga da classe pelo sistema seria chamado o método construtor que faria esta atribuição.
Em muitos dos sistemas o método construtor é chamado automaticamente, portanto na própria classe
definimos o método construtor que será executado assim que a classe for carrgada.
Suponha que uma parte I do programa carregue a Classe A...ai suponha que a Classe II carregue também a classe A...o que vai acontecer ? Quando o programa for compilado ( convertido para o código que a máquina sabe executar ) vai dar um erro de dupla definição da Classe A porque se foi carregado o mesmo objeto duas vezes qual deles deve ser usado ?
Em todas as linguagens a definição de um item tem que ser único ou ter uma assinatura que diferencie
ele de outro. Por exemplo, poderiamos ter uma variavel a inteira e outra variavel a string e ao atribuir
o valor 4 a variável a o programa saberia, automaticamente, que como o valor atribuído é inteiro deverá
ser utilizada a variável a inteira e não a string.
Isso nem sempre é possível com variáveis mas com funções, por exemplo, é possível.
A Interface informa que existe o elemento mas define ele como externo, ou seja, será definido em outra parte do programa a ser compilado. Portanto, diversos módulos poderiam usar a classe A informada pela interface mas só um módulo faria a inclusão da classe A fora do módulo pois esta seria a que faria todas as definições em detalhes.
Citando um exemplo, numa interface teriamos a definição de uma variável a inteira mas nessa definição da interface ela seria definida como external, ou seja, a interface informa o nome e o tipo da variável e define que alguém futuramente definirá mais algum detalhe sobre ela. Para o módulo que esta compilando sabendo o nome e o tipo da variável é o suficiente para prosseguir na compilação e será deixado para no final da montagem do programa compilado (linkagem) juntar todas as partes do programa e verificar se esta tudo certo.
Lógicamente podemos ter conflito entre a classe e a interface. A classe pode dizer que a variável a é inteira e a interface dizer que a variável a é string.
Na maioria das linguagem a passagem de parâmetros se dá ou por valor (ByVal) ou por referência (ByRef).
Como o próprio termo diz, a passagem do parâmetro se dá por valor, ou seja, os valor da variável em
sí é passado.
Sendo assim se eu informar var a : integer = 20; e chamar a funcaox(a); Na chamada da funcaox estarei
passando o valor da variável a.
Na funcaox se eu só quiser utilizar o valor sem problemas. Mas se eu precisar fazer com que
na funcaox o valor vá de 0 até o valor de a eu preciso criar outra variável para permitir essa
'alteração de valor'. Então eu crio e passo o valor do parâmetro para uma variável e utilizo a variável
local criada e não o parâmetro recebido.
Outra problemas com a passagem de parâmetros por valor é que você não pode alterar o valor do
parâmetro na função chamadora, ou seja, se eu fizer na funcaox a=a+1 ( se a linguagem permitir )
a funcao x até pode utilizar esse novo valor mas com certeza a função chamadora não irá receber
o valor da variável a alterado da funcaox porque passou apenas seu valor.
Na maioria das linguagens as variáveis que ocupam poucos bytes são passadas por valor, como as variáveis inteiras, por exemplo.
Neste caso é passado um ponteiro apontando para região de memória onde a variável foi armazenada.
Sendo assim a função chamada não precisa criar uma nova variável se precisar alterar seu valor e se
alterar o seu valor a função chamadora também terá o valor da variável alterada no sistema.
Na maioria das linguagens as variáveis que ocupam muitos bytes são passadas por referencia já que o simples fato de copiar seria um custo em processamento e em memória. As variáveis tipo string e arrays são normalmente passados por referência.